package com;

public class datatype_control {
    public static void main(String[] args) {
        int num1 = 123;
        boolean isMan = true;
        int i = 100;
        long l = 110l; //
//        long l = 123;

        double pi = 3.14;
        float ci = 43.24f;
//        float bi = 3.15;//  error

//        3.15 == 3.15F; // false
//        3.14 == 3.14D; // true
        System.out.println(3.15 == 3.15F);  // false
        System.out.println(3.15 == 3.15D);  // false
        System.out.println("====================");

        char c1 = 'A'; // 使用单个字符
        char c2 = 53;// 使用十进制的整数(Unicode 值) , [0,65535]
//        char c3 = '\u0061'; // 使用十六进制的整数,格式 \ u   XXXX' ,  ('\u0000'~'\u00FF')
        /*
         * 自动类型转换\隐式类型转换
         * - 如果直接将一个较小的整数常量 （byte、short 范围内） 赋值给一个byte或者short变量，系统会自动把这个整型
         * 常量当成 byte 或 short类型来处理
         * */

        byte b2 = 64; //
        int a = 13;
        byte b = (byte) a;//
        float c = (float) 5.6;//
        int q = (int) -12.89; //
        char o = (char) 65;
        System.out.println((char) 53);
        System.out.println(o);
        System.out.println("====================");

        System.out.println('A' + 'B');
        System.out.println("A" + "B");
//        System.out.println(10 / 0);
        System.out.println(10.0 / 0);
        System.out.println(-10.0 / 0);
        System.out.println(0 / 0.0);
        /*
        注意：
        无穷大和 NaN 都属于 double 浮点类型
        但是所有正无穷大数值都是相等的，所有负无穷大数值也是相等的
        NaN 不与任何数值相等，也不等于自己
        */
        System.out.println("========================");
        // ++ --
        int i1 = 1;
        i1 = i1++;
        System.out.println(i1);

        int j = 1;
        j = ++j;
        System.out.println(j);

        System.out.println("=========================");
        byte a1 = 127;
        byte b1 = 127;
//        b = a + b; // error : cannot convert from int to byte
        b1 += a1; // ok
        short s = 5;
        s += 5; // s = (short)(s + 5)
        System.out.println(s);
        System.out.println("===========================");

        System.out.println(97 == 'a');
        System.out.println(5.0 == 5);
//        System.out.println("hello" == new Animal()); compile error
        System.out.println("==============================");
        // 三目运算
        int number = 10;
        String res = number % 2 == 0 ? "偶数" : "奇数";
        System.out.println(res);

        /*
        * 逻辑运算符
        * &: 与，all true  abs -> true
        * &&:短路与，  左边为false 结果都 false 且后面不执行
        * |: 或， all false   abs -> false     有一个是true 结果就是true
        * ||: 短路或，左边为true 结果是 true  且不计算右边
        * ^:  异或， 判断两个操作是否不同，  不同则 true
        * !: 取反
        * */

        /*
        *位运算符
        * 操作的是数的补码的二进制位
        * 位运算符只能操作整数类型的变量或值
        *
        * & ：按位与，当两位同时为 1 时才返回 1
        * | ：按位或，只要有一位为 1 即可返回 1
        * ~ ：按位非，单目运算符，将操作数的每个位（包括符号位）全部取反
        * ^ ：按位异或，当两位相同时返回 0，不同时返回 1
        * << ：左移运算符
        * >> ：右移运算符
        * >>>：无符号右移运算符
        *
        * */
    }
}
